﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biblioteca.dao.iClassesDAO.jogo;
using Biblioteca.classesBasicas.jogo;
using Biblioteca.util;
using System.Data.SqlClient;

namespace Biblioteca.dao.classesDAO.jogo
{
    class CampoDAO : Conexao, ICampoDAO
    {
        public void cadastrar(Campo objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comandoSql = conexao.CreateCommand();
                comandoSql.CommandText = "INSERT INTO CAMPO(TIPO, TAMANHO) VALUES ('" + objeto.Tipo + "','" + objeto.Tamanho + "')";
                comandoSql.ExecuteNonQuery();
                comandoSql.Dispose();
                this.fecharConexao();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao cadastar Campo.");
            }
            finally
            {
                this.fecharConexao();
            }
        }

        public void alterar(Campo objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("UPDATE CAMPO SET TIPO='" + objeto.Tipo + "', TAMANHO='" + objeto.Tamanho + "'" + " WHERE CAMPO.ID_CAMPO = " + Convert.ToInt32(objeto.Id), this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao alterar Campo.");
            }
            finally
            {
                this.fecharConexao();
            }

        }

        //CRIAR PROCEDURE
        public void remover(Campo objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("EXEC PROCEDURE_DELETAR_CAMPO " + Convert.ToInt32(objeto.Id), this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao remover Campo.");
            }
            finally
            {
                this.fecharConexao();
            }
        }

        public Campo consultarPorId(string id)
        {
            Campo campoMetodo = null;

            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_CAMPO,TIPO,TAMANHO FROM CAMPO WHERE CAMPO.ID_CAMPO=" + Convert.ToInt32(id), this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                if (DbReader.Read())
                {
                    campoMetodo = new Campo();
                    campoMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_CAMPO")));
                    campoMetodo.Tipo = DbReader.GetString(DbReader.GetOrdinal("TIPO"));
                    campoMetodo.Tamanho = DbReader.GetString(DbReader.GetOrdinal("TAMANHO"));
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao consultar o Campo.");
            }

            finally
            {
                this.fecharConexao();
            }
            return campoMetodo;
        }

        public List<Campo> listar()
        {
            List<Campo> listaCampo = new List<Campo>();

            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_CAMPO, TIPO, TAMANHO FROM CAMPO", this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                while (DbReader.Read())
                {
                    Campo campoMetodo = new Campo();
                    campoMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_CAMPO")));
                    campoMetodo.Tipo = DbReader.GetString(DbReader.GetOrdinal("TIPO"));
                    campoMetodo.Tamanho = DbReader.GetString(DbReader.GetOrdinal("TAMANHO"));

                    listaCampo.Add(campoMetodo);
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao listar o Campo.");
            }

            finally
            {
                this.fecharConexao();
            }
            return listaCampo;
        }

    }
}
